home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1998 / MacHack 1998.toast / Papers / C++ Exceptions / µShell / Array Classes / (Hidden) / LinkedList.h < prev    next >
Encoding:
C/C++ Source or Header  |  1998-06-01  |  1.7 KB  |  63 lines  |  [TEXT/CWIE]

  1. /*
  2.     File:        LinkedList.h
  3.  
  4.     Contains:    A linked list
  5.     Written by: Steve Sisak
  6.     Copyright:    © 1995 by Steve Sisak, all rights reserved.
  7.  */
  8.  
  9. #ifndef _LINKEDLIST_
  10. #define _LINKEDLIST_
  11. #pragma once
  12.  
  13. #include <Types.h>
  14.  
  15. class ListLink;
  16. class LinkedListIterator;
  17.  
  18. //--------------------------------------------------------------------------------
  19. class LinkedList
  20. {
  21.     friend class LinkedListIterator;
  22.     friend class ListLink;
  23.  
  24. protected:
  25.     // Assumptions:
  26.     //    (fFirstLink == nil) == (fLastLink == nil)
  27.     //    fListSize >= 0
  28.     
  29.     ListLink*            fFirstLink;        // first object in list
  30.     ListLink*            fLastLink;        // last object on list
  31.     LinkedListIterator*    fIteratorList;    // singly-linked list of iterators
  32.     long                fElementCount;        // cached for convenience
  33.  
  34. public:
  35.     LinkedList(ListLink* first = nil, ListLink* last = nil);
  36.     virtual    ~LinkedList();
  37.  
  38.     inline    ListLink*    GetFirstLink()        { return fFirstLink; }
  39.     inline    ListLink*    GetLastLink()        { return fLastLink; }
  40.     inline    long        GetElementCount()    { return fElementCount; }
  41.     inline    bool        IsEmpty()            { return fElementCount == 0; }
  42.  
  43.     virtual ListLink*    GetNthLink(long index);        // negative index from end
  44.  
  45.     virtual void        AppendLink(ListLink& link);
  46.     virtual void        PrependLink(ListLink& link);
  47.     virtual void        InsertBefore(ListLink& link, ListLink& before);
  48.     virtual void        InsertAfter(ListLink& link, ListLink& after);
  49.  
  50.     virtual ListLink*    RemoveFirstLink(void);        // Useful for stack
  51.     virtual ListLink*    RemoveLastLink(void);        // Useful for queue
  52.     virtual void        RemoveAllLinks(void);        // Speed optimization
  53.     virtual void        RemoveLink(ListLink& link);
  54.  
  55.     virtual void        LinkRemoved(ListLink& link);
  56.     virtual void        LinkInserted(ListLink& link);
  57.  
  58. protected:
  59.     virtual void        InsertLink(ListLink& link, ListLink* after, ListLink* before);
  60. };
  61.  
  62. #endif // _LINKEDLIST_
  63.